package org.gap.jseed.injection.annotation;

import static java.lang.annotation.ElementType.METHOD;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * The method in which this annotation is on must return a value.  This return value will be bound
 * to the return Type specified on the method.  
 * 
 * Provides a flexible way of instantiating builders in which every time the container is asking for
 * the returned type, the seeded method on this object will be called.  
 * 
 * Only one object can provide for a Seed, such that if another instance is bound to a SeedContainer, 
 * and it also as a method which is annotated with the Seed attribute then any following which also 
 * attempt to bind will throw an exception.
 * 
 * @author gpelcha
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({METHOD})
public @interface Seed {

}
